1 Parte I

1.1 Descrição de dados

Para começar nossa análise vamos identificar as variáveis para entender o que elas podem significar no contexto da composição de um vinho.

str(wine_dset)
## 'data.frame':    6497 obs. of  14 variables:
##  $ id_vinho          : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ fixedacidity      : num  6.6 6.7 10.6 5.4 6.7 6.8 6.6 7.2 5.1 6.2 ...
##  $ volatileacidity   : num  0.24 0.34 0.31 0.18 0.3 0.5 0.61 0.66 0.26 0.22 ...
##  $ citricacid        : num  0.35 0.43 0.49 0.24 0.44 0.11 0 0.33 0.33 0.2 ...
##  $ residualsugar     : num  7.7 1.6 2.2 4.8 18.8 ...
##  $ chlorides         : num  0.031 0.041 0.063 0.041 0.057 0.075 0.069 0.068 0.027 0.035 ...
##  $ freesulfurdioxide : num  36 29 18 30 65 16 4 34 46 58 ...
##  $ totalsulfurdioxide: num  135 114 40 113 224 49 8 102 113 184 ...
##  $ density           : num  0.994 0.99 0.998 0.994 1 ...
##  $ pH                : num  3.19 3.23 3.14 3.42 3.11 3.36 3.33 3.27 3.35 3.11 ...
##  $ sulphates         : num  0.37 0.44 0.51 0.4 0.53 0.79 0.37 0.78 0.43 0.53 ...
##  $ alcohol           : num  10.5 12.6 9.8 9.4 9.1 9.5 10.4 12.8 11.4 9 ...
##  $ quality           : int  5 6 6 6 5 5 4 6 7 6 ...
##  $ Vinho             : Factor w/ 2 levels "RED","WHITE": 2 2 1 2 2 1 1 1 2 2 ...

PH: vinhos são naturalmente ácidos, com a maioria indo de 2,8 a 4,0. Os níveis de pH estão intrinsecamente ligados ao estilo e qualidade dos vinhos. O pH relativamente baixo, na faixa de 3,1 a 3,4, parece ser pré-requisito para a produção de vinhos de alta qualidade com solidez.

Acidez Volátil: é um componente do vinho que tipicamente cresce conforme o vinho envelhece e, em quando atinge um nível elevado, é responsável pelo aroma de vinagre. É o resultado da falta de cuidados durante a vinificação.

Acidez Fixa: acidez é uma das características básica que tem uma contribuição relevante para o sabor, frescura, equilíbrio e capacidade de conservação dos vinhos. Acidez Fixa é a diferença entre acidez total do vinho e sua acidez volátil.

Ácido Cítrico: nos vinhos o ácido cítrico tem pouca ou nenhuma presença. Nos vinhos tintos desaparece devido à ação de bactérias láticas (fermentação malolática). Sensorialmente é fresco, porém em alguns casos pode apresentar um leve final amargo.

Dióxido de Enxofre Livre: as atividade antioxidásica do dióxido de enxofre bloqueia a ação de enzimas oxidantes, principalmente no início do processo de elaboração, evitando reações de oxidação e o consequentemente o escurecimento do vinho. O excesso de dióxido de enxofre livre tem um grande impacto no sabor, deixando-o mais amargo e com uma sensação mais metálica.

Dióxido de Enxofre Total: quanto mais dióxido de enxofre total estiver disponível, mais estável será o dióxido de enxofre livre.

Açúcar Residual: no processo de fermentação do vinho a levedura vai transformando o açúcar da uva em álcool. Por isso que, em teoria, quanto mais açúcar houver na uva, mais álcool haverá no vinho. Porem nem todo o açúcar é transformado em alcool, e o açúcar que resta no final do processo de fermentação é conhecido como açúcar residual.

Cloretos: os vinhos possuem em sua composição diversos produtos enológicos, sais e ácidos. Estes sais influenciam diretamente em sua qualidade.

Densidade: define a leveza do vinhos, e pode ser caracterizado pelo tipo da uva ou por técnicas usadas na vinificação que podem ser determinantes na concentração da bebida.

Álcool: essa é uma característica que causa controversa entre sommeliers. Embora há vinhos premiados com uma porcentagem maior de álcool, outros defendem que para o vinho ser de qualidade tem que ser inferior a 14% de álcool.

Sulfatos: os sulfatos também tem um papel de conservantes nos vinhos e ajudam na extração dos compostos fenólicos do vinho, responsáveis pela concentração de cor e taninos.

Qualidade: uma infidade de aspectos influenciam na qualidade dos vinhos, desde aspectos como o nivel de oxidação, até a contaminação da rolha. No dataset a qualidade máxima é uma escala inteira entre 0 (menor qualidade) e 10 (maior qualidade).

Vinho: há inúmeros tipos de vinho (ex: tintos, brancos, roses, doces e espumantes), porém nossos dados contém apenas dois tipos: brancos e tintos.

Links acessados para fundamentação teórica:

1.1.1 Dimensão do dataset

wine_dset %>% 
  group_by(Vinho) %>% 
  count()
## # A tibble: 2 x 2
## # Groups:   Vinho [2]
##   Vinho     n
##   <fct> <int>
## 1 RED    1599
## 2 WHITE  4898

A quantidade de dados para os vinhos brancos é aproximadamente 3 vezes maior que o vinho tinto.

1.1.2 Integridade dos dados

Antes de qualquer análise, vamos conferir se nosso dataset não apresenta valores faltantes:

wine_white_dset <- 
  wine_dset %>%
  filter(Vinho == 'WHITE')

wine_red_dset <- 
  wine_dset %>% 
  filter(Vinho == 'RED')

sum(is.na(wine_white_dset))
## [1] 0
sum(is.na(wine_red_dset))
## [1] 0

Como as somas dos valores NAs, tanto para o vinho tinto quanto para o branco, podemos afirmar que não há dados faltantes. Dessa forma podemos continuar sem precisar substituir ou remover os valores iguais a NA.

1.1.3 Característica de cada tipo de vinho

O vinho branco e tinto apresentam características diferentes que definem se ele é bom ou ruim. Vamos dar uma olhada nos dados pra cada característica:

Vinho Branco

summary(wine_white_dset)
##     id_vinho     fixedacidity    volatileacidity    citricacid    
##  Min.   :   1   Min.   : 3.800   Min.   :0.0800   Min.   :0.0000  
##  1st Qu.:1650   1st Qu.: 6.300   1st Qu.:0.2100   1st Qu.:0.2700  
##  Median :3310   Median : 6.800   Median :0.2600   Median :0.3200  
##  Mean   :3284   Mean   : 6.855   Mean   :0.2782   Mean   :0.3342  
##  3rd Qu.:4932   3rd Qu.: 7.300   3rd Qu.:0.3200   3rd Qu.:0.3900  
##  Max.   :6497   Max.   :14.200   Max.   :1.1000   Max.   :1.6600  
##  residualsugar      chlorides       freesulfurdioxide totalsulfurdioxide
##  Min.   : 0.600   Min.   :0.00900   Min.   :  2.00    Min.   :  9.0     
##  1st Qu.: 1.700   1st Qu.:0.03600   1st Qu.: 23.00    1st Qu.:108.0     
##  Median : 5.200   Median :0.04300   Median : 34.00    Median :134.0     
##  Mean   : 6.387   Mean   :0.04577   Mean   : 35.31    Mean   :138.4     
##  3rd Qu.: 9.900   3rd Qu.:0.05000   3rd Qu.: 46.00    3rd Qu.:167.0     
##  Max.   :45.800   Max.   :0.34600   Max.   :289.00    Max.   :440.0     
##     density             pH          sulphates         alcohol     
##  Min.   :0.9871   Min.   :2.720   Min.   :0.2200   Min.   : 8.00  
##  1st Qu.:0.9917   1st Qu.:3.090   1st Qu.:0.4100   1st Qu.: 9.50  
##  Median :0.9937   Median :3.180   Median :0.4700   Median :10.40  
##  Mean   :0.9940   Mean   :3.188   Mean   :0.4898   Mean   :10.51  
##  3rd Qu.:0.9961   3rd Qu.:3.280   3rd Qu.:0.5500   3rd Qu.:11.40  
##  Max.   :1.0140   Max.   :3.820   Max.   :1.0800   Max.   :14.20  
##     quality        Vinho     
##  Min.   :3.000   RED  :   0  
##  1st Qu.:5.000   WHITE:4898  
##  Median :6.000               
##  Mean   :5.878               
##  3rd Qu.:6.000               
##  Max.   :9.000

Vinho Tinto

summary(wine_red_dset)
##     id_vinho     fixedacidity   volatileacidity    citricacid   
##  Min.   :   3   Min.   : 4.60   Min.   :0.1200   Min.   :0.000  
##  1st Qu.:1523   1st Qu.: 7.10   1st Qu.:0.3900   1st Qu.:0.090  
##  Median :3103   Median : 7.90   Median :0.5200   Median :0.260  
##  Mean   :3141   Mean   : 8.32   Mean   :0.5278   Mean   :0.271  
##  3rd Qu.:4690   3rd Qu.: 9.20   3rd Qu.:0.6400   3rd Qu.:0.420  
##  Max.   :6490   Max.   :15.90   Max.   :1.5800   Max.   :1.000  
##  residualsugar      chlorides       freesulfurdioxide totalsulfurdioxide
##  Min.   : 0.900   Min.   :0.01200   Min.   : 1.00     Min.   :  6.00    
##  1st Qu.: 1.900   1st Qu.:0.07000   1st Qu.: 7.00     1st Qu.: 22.00    
##  Median : 2.200   Median :0.07900   Median :14.00     Median : 38.00    
##  Mean   : 2.539   Mean   :0.08747   Mean   :15.87     Mean   : 46.47    
##  3rd Qu.: 2.600   3rd Qu.:0.09000   3rd Qu.:21.00     3rd Qu.: 62.00    
##  Max.   :15.500   Max.   :0.61100   Max.   :72.00     Max.   :289.00    
##     density             pH          sulphates         alcohol       
##  Min.   :0.9901   Min.   :2.740   Min.   :0.3300   Min.   : 0.9567  
##  1st Qu.:0.9956   1st Qu.:3.210   1st Qu.:0.5500   1st Qu.: 9.5000  
##  Median :0.9968   Median :3.310   Median :0.6200   Median :10.2000  
##  Mean   :0.9967   Mean   :3.311   Mean   :0.6581   Mean   :10.4001  
##  3rd Qu.:0.9978   3rd Qu.:3.400   3rd Qu.:0.7300   3rd Qu.:11.1000  
##  Max.   :1.0037   Max.   :4.010   Max.   :2.0000   Max.   :14.9000  
##     quality        Vinho     
##  Min.   :3.000   RED  :1599  
##  1st Qu.:5.000   WHITE:   0  
##  Median :6.000               
##  Mean   :5.636               
##  3rd Qu.:6.000               
##  Max.   :8.000

1.1.3.1 Diferença da mediana das características por tipo de vinho

Trabalharemos com os valores das medianas, ao invés das médias, porque as medianas não sofrem o impacto que as médias sofreria devido a presença de outliers. Explorando esses dados é possível ter um overview de como essas característica estão organizadas pelo dataset e identificar o que difere um vinho tinto do branco.

# Vinho Tinto
median_red_dset <-  sapply(select(wine_red_dset, -c(Vinho, id_vinho, quality)), median)
median_red_dset <- as.data.frame(median_red_dset)
median_red_dset <- rownames_to_column(median_red_dset) %>% 
  rename(Mediana = median_red_dset, Caracteristica = rowname) 

# Vinho Branco
median_white_dset <-  sapply(select(wine_white_dset, -c(Vinho, id_vinho, quality)),median)
median_white_dset <- as.data.frame(median_white_dset)
median_white_dset <- rownames_to_column(median_white_dset) %>% 
  rename(Mediana = median_white_dset, Caracteristica = rowname) 

# Diferenca
mediana_diferenca <- data.frame(
  Caracteristica = median_white_dset$Caracteristica,
  Diferenca.Mediana = abs(median_white_dset$Mediana - median_red_dset$Mediana)
)

top_n(arrange(mediana_diferenca, desc(mediana_diferenca$Diferenca.Mediana)), dim(arrange(mediana_diferenca, desc(mediana_diferenca$Diferenca.Mediana)))[1])
##        Caracteristica Diferenca.Mediana
## 1  totalsulfurdioxide          96.00000
## 2   freesulfurdioxide          20.00000
## 3       residualsugar           3.00000
## 4        fixedacidity           1.10000
## 5     volatileacidity           0.26000
## 6             alcohol           0.20000
## 7           sulphates           0.15000
## 8                  pH           0.13000
## 9          citricacid           0.06000
## 10          chlorides           0.03600
## 11            density           0.00301

Através das medianas, três valores chamaram atenção entre os tipos de vinho: totalsulfurdioxide, freesulfurdioxide e residualsugar.

Vamos utilizar a análise gráfica, com as três características acima, para reforçar a visualização dos valores já obtidos na função summary (a visualização gráfica por histogramas nos auxilia também na detecção de outliers):

1.1.3.2 Histogramas de cada característica

plot_ly(wine_dset, y = ~totalsulfurdioxide,type = "box",
              color = ~Vinho, colors = c("red", "khaki")) %>% 
      layout(title = "Dióxido de Enxofre Total")
plot_ly(wine_dset, y = ~freesulfurdioxide,type = "box",
              color = ~Vinho, colors = c("red", "khaki")) %>% 
      layout(title = "Dióxido de Enxofre Livre")
plot_ly(wine_dset, y = ~residualsugar,type = "box",
              color = ~Vinho, colors = c("red", "khaki")) %>% 
      layout(title = "Açúcar Residual")
plot_ly(wine_dset, y = ~fixedacidity,type = "box",
              color = ~Vinho, colors = c("red", "khaki")) %>% 
      layout(title = "Acidez Fixa")
plot_ly(wine_dset, y = ~pH,type = "box",
              color = ~Vinho, colors = c("red", "khaki")) %>% 
      layout(title = "pH")

Após a análise gráfica ficou ainda mais clara a diferença entre cada tipo de vinho (tinto ou branco), portanto, vamos selecionar somente um tipo de vinho para a criação de um modelo preditivo coerente. Além disso, como o número de dados pros vinhos brancos é bem maior do que para os tintos (aprox. 3 vezes maior), utilizaremos os dados que oferecem mais amostras pra treinar e validar nosso modelo.

Antes de prosseguirmos para a parte de remoção de outliers e a regressão linear, a variável o freesulfurdioxide chamou a atenção desde o tópico “Descrição dos Dados” por sua descrição dar indícios que este valor está relacionado ao sabor e, consequentemente, a qualidade do vinho. Testando esta relação:

wine_dset %>%
  group_by(quality, freesulfurdioxide) %>% 
  ggplot(aes(factor(quality), freesulfurdioxide, color = quality)) +
  geom_boxplot() +
  theme(legend.position = "none") +
  facet_wrap(~Vinho ) +
  labs(y = "Dióxido de enxofre", x = "Qualidade")

Embora os vinhos de maior qualidade apresentam um baixo valor de dióxido de enxofre livre, a relação dos outros valores com qualidade se mostrou insuficiente para determinar se o vinho é bom ou não, ou seja, outras características correlacionadas com o dióxido de enxofre livre devem explicar melhor a qualidade.

1.1.4 Correlação

wine_white_dset <- wine_white_dset %>% 
  select(-c(Vinho, id_vinho))

whitedset_cor <- cor(wine_white_dset)

corrplot::corrplot(whitedset_cor, method="circle", order="hclust")

Pela matriz de correlação é perceptível como algumas variáveis se correlacionam mais com o restante do dataset do que as outras, são elas: density, totalsufurdioxide, freesufurdioxide e alcohol.

1.1.5 Componentes principais

As características que possuem similaridade alta no nível da correlação podem trazer informações redundantes e aumentar a instabilidade dos modelos, por isso, usaremos a análise de componentes principais para combinar essas variáveis para formar componentes ortogonais (não relacionadas com os componentes anteriores).

# Removendo a variavel quality
white_dsetX <- wine_white_dset[,-12]

white_pcomp <- prcomp(white_dsetX, center = TRUE,scale = TRUE)
summary(white_pcomp)
## Importance of components:
##                           PC1    PC2    PC3     PC4     PC5     PC6
## Standard deviation     1.7999 1.2551 1.1040 1.01022 0.98743 0.96603
## Proportion of Variance 0.2945 0.1432 0.1108 0.09278 0.08864 0.08484
## Cumulative Proportion  0.2945 0.4377 0.5485 0.64129 0.72993 0.81477
##                            PC7     PC8     PC9    PC10    PC11
## Standard deviation     0.84999 0.77459 0.64068 0.53811 0.12262
## Proportion of Variance 0.06568 0.05454 0.03732 0.02632 0.00137
## Cumulative Proportion  0.88045 0.93499 0.97231 0.99863 1.00000
plot(white_pcomp, type = 'l', main = "Componentes Principais")

# quality_column <- wine_white_dset[,12]
# 
# for (col in colnames(white_dsetX)) {
#   upper_fence <- quantile(white_dsetX[,col], 0.75, names = FALSE) +(1.5 * IQR(white_dsetX[,col]))
#   lower_fence <- quantile(white_dsetX[,col],0.25, names = FALSE) - (1.5 * IQR(white_dsetX[,col]))
#   
#   idx <- which(white_dsetX[,col] < lower_fence | white_dsetX[,col] > upper_fence)
#   for (x in idx) {
#     white_dsetX[x,col] <- NA
#   }
# }
# 
# wine_white_dset <- mutate(white_dsetX,quality = quality_column)

2 Parte II - (Vinhos Brancos)

2.1 Regresão Linear

O objetivo desta sessão é criar um modelo de regressão linear para estimar o índice de qualidade dos vinhos. Após dividir o dataset entre dataset de treino e teste, traçamos uma regressão linear com todas variáveis para estimar a qualidade do vinho:

set.seed(2019)
prt <- 2/3

treino <- sample(1:NROW(wine_white_dset), as.integer(prt*NROW(wine_white_dset)))

trainData <- wine_white_dset[treino,]
testData  <- wine_white_dset[-treino,]

modeloBackWard <- lm(quality ~., data = trainData)
summary(modeloBackWard)
## 
## Call:
## lm(formula = quality ~ ., data = trainData)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.9599 -0.4963 -0.0370  0.4594  3.1007 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         2.392e+02  2.746e+01   8.710  < 2e-16 ***
## fixedacidity        1.296e-01  2.788e-02   4.650 3.46e-06 ***
## volatileacidity    -1.903e+00  1.427e-01 -13.337  < 2e-16 ***
## citricacid         -1.240e-02  1.160e-01  -0.107   0.9149    
## residualsugar       1.119e-01  1.042e-02  10.746  < 2e-16 ***
## chlorides          -7.694e-02  6.551e-01  -0.117   0.9065    
## freesulfurdioxide   4.099e-03  1.023e-03   4.009 6.24e-05 ***
## totalsulfurdioxide -1.701e-04  4.629e-04  -0.367   0.7133    
## density            -2.399e+02  2.782e+01  -8.621  < 2e-16 ***
## pH                  9.112e-01  1.354e-01   6.729 2.01e-11 ***
## sulphates           6.834e-01  1.235e-01   5.532 3.41e-08 ***
## alcohol             7.133e-02  3.477e-02   2.052   0.0403 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7413 on 3253 degrees of freedom
## Multiple R-squared:  0.2822, Adjusted R-squared:  0.2798 
## F-statistic: 116.3 on 11 and 3253 DF,  p-value: < 2.2e-16

Os valores com asterisco são aqueles mais correlacionados com a variável quality. A coluna Pr(>|t|) mostra o Teste T de Student, portanto, valores abaixo do p value igual a 0,05 são relevantes para a análise de acordo com a taxa escolhida (p = 5%). Como a maioria das variáveis possuem asterisco, iremos utilizar duas abordagens pra encontrar o melhor modelo usando menos variáveis para evitar informações redundantes:

  • Utilizar as bibliotecas leaps e car para encontrar o melhor subset pra regressão linear;
  • Utilizar as componentes principais no modelo de regressão linear.

2.1.1 Subset para regressão linear

Biblioteca Leaps e Car

library(car)
library(leaps)

leaps <- regsubsets(quality~., data = trainData, nbest = 2, method = "exhaustive")
subsets(leaps, statistic = "bic", legend = FALSE, ylim=c(-1040,-940), xlim=c(2,6.3))

##                    Abbreviation
## fixedacidity                 fx
## volatileacidity               v
## citricacid                   ct
## residualsugar                 r
## chlorides                    ch
## freesulfurdioxide            fr
## totalsulfurdioxide            t
## density                       d
## pH                            p
## sulphates                     s
## alcohol                       a

Usando somente 4 variáveis pra construir o modelo de regressão linear da qualidade, o gráfico acima mostra que a melhor escolha é a combinação volatileacidity+residualsugar+density+alcohol por ter o menor valor do critério de informação bayesiano (BIC). A ideia de pegar 4 variáveis é pra selecionar um número reduzido de itens pra construir o modelo, desta forma no mundo real nós conseguiríamos fazer um controle de qualidade usando testes químicos com menos substâncias, o que depreciaria o custo do processo.

modelo4 <- lm(quality ~volatileacidity+residualsugar+density+alcohol,
                     data = trainData)
summary(modelo4)
## 
## Call:
## lm(formula = quality ~ volatileacidity + residualsugar + density + 
##     alcohol, data = trainData)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.3361 -0.5047 -0.0266  0.4659  3.1651 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      1.036e+02  1.576e+01   6.575 5.64e-11 ***
## volatileacidity -2.132e+00  1.370e-01 -15.565  < 2e-16 ***
## residualsugar    6.218e-02  6.168e-03  10.081  < 2e-16 ***
## density         -1.006e+02  1.568e+01  -6.417 1.60e-10 ***
## alcohol          2.347e-01  2.323e-02  10.105  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.752 on 3260 degrees of freedom
## Multiple R-squared:  0.2597, Adjusted R-squared:  0.2587 
## F-statistic: 285.8 on 4 and 3260 DF,  p-value: < 2.2e-16

O valor R² ainda é muito baixo para o modelo, 25,97%. Esse valor significa que o modelo explica somente a variação desta porcentagem dos dados do modelo.

E com 6 variáveis?

modelo6 <- lm(quality ~fixedacidity+volatileacidity+residualsugar+density+pH+sulphates,
                     data = trainData)
summary(modelo6)
## 
## Call:
## lm(formula = quality ~ fixedacidity + volatileacidity + residualsugar + 
##     density + pH + sulphates, data = trainData)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.5143 -0.4871 -0.0502  0.4701  3.0612 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      2.868e+02  9.022e+00  31.787  < 2e-16 ***
## fixedacidity     1.582e-01  1.929e-02   8.202 3.38e-16 ***
## volatileacidity -1.935e+00  1.349e-01 -14.340  < 2e-16 ***
## residualsugar    1.316e-01  5.336e-03  24.664  < 2e-16 ***
## density         -2.878e+02  9.263e+00 -31.076  < 2e-16 ***
## pH               1.081e+00  1.035e-01  10.448  < 2e-16 ***
## sulphates        7.873e-01  1.177e-01   6.688 2.65e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7437 on 3258 degrees of freedom
## Multiple R-squared:  0.2765, Adjusted R-squared:  0.2752 
## F-statistic: 207.5 on 6 and 3258 DF,  p-value: < 2.2e-16

O valor R² agora é de 27,65%, ou seja, o ganho na qualidade do modelo ao adicionar mais duas variáveis foi pouco significativo, portanto, estes modelos de regressão linear não são adequados pra predição da qualidade.

Tentaremos agora usar regressão linear com os componentes principais para aumentar R².

2.1.2 Componentes principais com regressão linear

# Removendo a variavel quality e criando variavel com componentes principais para teste dset
white_dsetX <- trainData[,-12]
white_pcomp <- prcomp(white_dsetX, center = TRUE,scale = TRUE)


trainData2 <- trainData[,12]
# white_pcomp foi calculado na sessao de componentes principais
trainData2 <- cbind(trainData2,data.frame(white_pcomp$x))
colnames(trainData2)[1] <- "quality"

modeloCP <- lm(quality ~., data = trainData2)
summary(modeloCP)
## 
## Call:
## lm(formula = quality ~ ., data = trainData2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.9599 -0.4963 -0.0370  0.4594  3.1007 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.891271   0.012973 454.108  < 2e-16 ***
## PC1          0.142066   0.007224  19.666  < 2e-16 ***
## PC2          0.055510   0.010324   5.377 8.11e-08 ***
## PC3          0.153743   0.011660  13.185  < 2e-16 ***
## PC4          0.180252   0.012903  13.970  < 2e-16 ***
## PC5          0.024707   0.013083   1.889  0.05904 .  
## PC6         -0.038497   0.013509  -2.850  0.00440 ** 
## PC7         -0.008152   0.015315  -0.532  0.59457    
## PC8          0.168294   0.016675  10.093  < 2e-16 ***
## PC9         -0.358493   0.020237 -17.715  < 2e-16 ***
## PC10        -0.074724   0.024135  -3.096  0.00198 ** 
## PC11        -0.803041   0.106341  -7.552 5.55e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7413 on 3253 degrees of freedom
## Multiple R-squared:  0.2822, Adjusted R-squared:  0.2798 
## F-statistic: 116.3 on 11 and 3253 DF,  p-value: < 2.2e-16
vinhos_brancos <- wine_dset %>% filter(Vinho == 'WHITE')
vinhos_brancos <- vinhos_brancos[2:13]
# Vinhos2 <- vinhos_brancos %>%
#   mutate(pc1 = acpcor$x[, 1]) %>%
#   mutate(pc2 = acpcor$x[, 2]) %>%
#   mutate(pc3 = acpcor$x[, 3]) %>%
#   mutate(pc4 = acpcor$x[, 4]) 

2.1.2.1 Analisando os coeficientes

Analisando os coeficientes:

attach(vinhos_brancos)

modelopc1 <- summary(lm(quality ~ alcohol+residualsugar+totalsulfurdioxide+density))
modelopc1
## 
## Call:
## lm(formula = quality ~ alcohol + residualsugar + totalsulfurdioxide + 
##     density)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.4675 -0.5386 -0.0124  0.4711  3.2149 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         1.007e+02  1.379e+01   7.303 3.27e-13 ***
## alcohol             2.366e-01  1.959e-02  12.077  < 2e-16 ***
## residualsugar       5.542e-02  5.295e-03  10.467  < 2e-16 ***
## totalsulfurdioxide  4.428e-04  3.160e-04   1.401    0.161    
## density            -9.835e+01  1.374e+01  -7.156 9.57e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7872 on 4893 degrees of freedom
## Multiple R-squared:  0.2106, Adjusted R-squared:  0.2099 
## F-statistic: 326.2 on 4 and 4893 DF,  p-value: < 2.2e-16
modelopc3 <- summary(lm(quality ~ citricacid+volatileacidity+fixedacidity))
modelopc3
## 
## Call:
## lm(formula = quality ~ citricacid + volatileacidity + fixedacidity)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.3170 -0.7450  0.0200  0.3588  3.3870 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      7.21420    0.10777  66.940  < 2e-16 ***
## citricacid      -0.03717    0.10761  -0.345     0.73    
## volatileacidity -1.74089    0.12372 -14.072  < 2e-16 ***
## fixedacidity    -0.12247    0.01526  -8.024 1.27e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8626 on 4894 degrees of freedom
## Multiple R-squared:  0.05189,    Adjusted R-squared:  0.05131 
## F-statistic: 89.28 on 3 and 4894 DF,  p-value: < 2.2e-16

Podemos observar no ModeloPC1:

quality <- 100.7 + 0.2366(alcohol) + 0.05542(residualsugar) + 0.0004428(totalsulfurdioxide) + 98.35(density)

R² <- 21,06%

Verificamos então que esse modelopc1 como tentativa de escolher um modelo que explique a variável quality, percebemos estatisticamente que os estimadores para o caso de beta 3 (totalsulfurdioxide) é muito próximo de 0. Assumindo um nível de significância a 5% de probabilidade podemos vê que o P valor de beta 3 (totalsulfurdioxide), é superior ao nível de significância.

Por esses motivos apresentados não há por que colocar totalsulfurdioxide no modelo.

Podemos observar no ModeloPC3:

Verificamos então que esse modelopc3 como tentativa de escolher um modelo que explique a variável quality, percebemos estatisticamente que os estimadores para o caso de beta 1 (citricacid) é muito próximo de 0. Pelo mesmo motivo apresentado do modelopc1. não há por que colocar citricacid no modelo.

quality <- 7.21420 - 0.28680(citricacid) - 1.76242(volatileacidity) - 0.12247(fixedacidity)

R² <- 51,89%

Reavaliando Modelos, depois da análise.

modelopc1 <- summary(lm(quality ~ alcohol+residualsugar+density))
modelopc1
## 
## Call:
## lm(formula = quality ~ alcohol + residualsugar + density)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.5114 -0.5347 -0.0116  0.4747  3.1974 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    96.01833   13.37790   7.177 8.17e-13 ***
## alcohol         0.23748    0.01958  12.129  < 2e-16 ***
## residualsugar   0.05469    0.00527  10.379  < 2e-16 ***
## density       -93.54585   13.31126  -7.028 2.39e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7873 on 4894 degrees of freedom
## Multiple R-squared:  0.2102, Adjusted R-squared:  0.2098 
## F-statistic: 434.3 on 3 and 4894 DF,  p-value: < 2.2e-16
modelopc3 <- summary(lm(quality ~ volatileacidity+fixedacidity))
modelopc3
## 
## Call:
## lm(formula = quality ~ volatileacidity + fixedacidity)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.3168 -0.7453  0.0217  0.3581  3.3862 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      7.21046    0.10721  67.253   <2e-16 ***
## volatileacidity -1.73451    0.12232 -14.180   <2e-16 ***
## fixedacidity    -0.12399    0.01461  -8.487   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8625 on 4895 degrees of freedom
## Multiple R-squared:  0.05187,    Adjusted R-squared:  0.05148 
## F-statistic: 133.9 on 2 and 4895 DF,  p-value: < 2.2e-16

Podemos perceber agora que R² do modelopc1 é 21,02% e R² do modelopc3 é 51,87%. Por esse motivo escolhemos o modelopc3. Mesmo R² do modelopc3 não sendo muito adequado, foi o melhor que conseguimos, realizando diversos testes.

2.1.2.2 Verificar pressuposições

2.1.2.2.1 Residuos
res <- rstandard(lm(quality ~ volatileacidity+fixedacidity))

modelo_fim <- lm(quality ~ volatileacidity+fixedacidity)

plot(predict(modelo_fim), res, xlab = "Preditor linear",ylab = "Residuos")
abline(h = 0, lty = 2)

qqnorm(residuals(modelo_fim), ylab="Residuos",xlab="Quantis teóricos",main="")
qqline(residuals(modelo_fim))

2.1.2.2.2 Teste de normalidade(Shapiro-Wilk)
shapiro.test(res)
## 
##  Shapiro-Wilk normality test
## 
## data:  res
## W = 0.97168, p-value < 2.2e-16

Verificando os residuos do modelo escolhido, nos mostra que pelo teste de normalidade utilizando a estatística do teste e obtendo o resultado de 0.97168 e o p valor de 2.2e-16. O valor de P do teste é pequeno por isso rejeita-se a hipótese de normalidade dos residuos e por consequência, conclui-se que os erros não são normalmente distribuídos

2.2 Árvore de regressão

Variáveis dependentes: ModeloPC1 <- (quality)
ModeloPC3 <- (quality)

Variáveis independentes:
ModeloPC1 <- (alcohol+residualsugar+density)
ModeloPC3 <- (volatileacidity+fixedacidity)

2.2.1 Analisando Modelos

Modelo PC1

modelopc1 <- rpart (quality ~ alcohol+residualsugar+density, data=vinhos_brancos, 
                     cp = 0.001,minsplit = 2,maxdepth=5)

summary(modelopc1)
## Call:
## rpart(formula = quality ~ alcohol + residualsugar + density, 
##     data = vinhos_brancos, cp = 0.001, minsplit = 2, maxdepth = 5)
##   n= 4898 
## 
##             CP nsplit rel error    xerror       xstd
## 1  0.161006505      0 1.0000000 1.0004473 0.02127689
## 2  0.021589481      1 0.8389935 0.8397610 0.02004095
## 3  0.014754876      2 0.8174040 0.8199205 0.01944217
## 4  0.011216103      3 0.8026491 0.8053202 0.01940537
## 5  0.007120579      4 0.7914330 0.7946545 0.01896735
## 6  0.005892037      6 0.7771919 0.7839129 0.01862457
## 7  0.004895494      7 0.7712998 0.7838744 0.01861043
## 8  0.003724600      8 0.7664043 0.7786234 0.01842886
## 9  0.003136388      9 0.7626797 0.7766472 0.01841073
## 10 0.002148696     10 0.7595434 0.7800319 0.01860043
## 11 0.002099654     11 0.7573947 0.7836789 0.01887617
## 12 0.001951928     12 0.7552950 0.7851128 0.01887319
## 13 0.001789442     13 0.7533431 0.7850234 0.01887368
## 14 0.001777643     14 0.7515536 0.7840824 0.01894233
## 15 0.001716374     16 0.7479984 0.7838425 0.01895180
## 16 0.001505435     18 0.7445656 0.7822217 0.01884201
## 17 0.001459041     19 0.7430602 0.7820983 0.01888190
## 18 0.001267890     20 0.7416011 0.7821643 0.01886965
## 19 0.001035207     21 0.7403332 0.7809756 0.01882556
## 20 0.001006451     22 0.7392980 0.7798740 0.01882908
## 21 0.001000000     23 0.7382916 0.7798740 0.01882908
## 
## Variable importance
##       alcohol       density residualsugar 
##            53            34            13 
## 
## Node number 1: 4898 observations,    complexity param=0.1610065
##   mean=5.877909, MSE=0.7841955 
##   left son=2 (3085 obs) right son=3 (1813 obs)
##   Primary splits:
##       alcohol       < 10.85    to the left,  improve=0.16100650, (0 missing)
##       density       < 0.992025 to the right, improve=0.11010040, (0 missing)
##       residualsugar < 6.15     to the right, improve=0.01487859, (0 missing)
##   Surrogate splits:
##       density       < 0.992005 to the right, agree=0.865, adj=0.637, (0 split)
##       residualsugar < 5.05     to the right, agree=0.667, adj=0.099, (0 split)
## 
## Node number 2: 3085 observations,    complexity param=0.01475488
##   mean=5.605511, MSE=0.5980247 
##   left son=4 (2200 obs) right son=5 (885 obs)
##   Primary splits:
##       alcohol       < 10.11667 to the left,  improve=0.030718810, (0 missing)
##       residualsugar < 12.125   to the left,  improve=0.009647650, (0 missing)
##       density       < 0.99355  to the right, improve=0.005601855, (0 missing)
##   Surrogate splits:
##       density       < 0.992605 to the right, agree=0.764, adj=0.179, (0 split)
##       residualsugar < 0.65     to the right, agree=0.714, adj=0.002, (0 split)
## 
## Node number 3: 1813 observations,    complexity param=0.02158948
##   mean=6.341423, MSE=0.7598782 
##   left son=6 (881 obs) right son=7 (932 obs)
##   Primary splits:
##       alcohol       < 11.74167 to the left,  improve=0.06019267, (0 missing)
##       residualsugar < 1.275    to the left,  improve=0.02534408, (0 missing)
##       density       < 0.98989  to the right, improve=0.02213755, (0 missing)
##   Surrogate splits:
##       density       < 0.990855 to the right, agree=0.712, adj=0.407, (0 split)
##       residualsugar < 1.675    to the left,  agree=0.572, adj=0.119, (0 split)
## 
## Node number 4: 2200 observations,    complexity param=0.0112161
##   mean=5.519545, MSE=0.5468907 
##   left son=8 (1552 obs) right son=9 (648 obs)
##   Primary splits:
##       residualsugar < 12.35    to the left,  improve=0.035806500, (0 missing)
##       density       < 0.99781  to the left,  improve=0.023681410, (0 missing)
##       alcohol       < 8.45     to the left,  improve=0.005220576, (0 missing)
##   Surrogate splits:
##       density < 0.99781  to the left,  agree=0.909, adj=0.691, (0 split)
##       alcohol < 9.15     to the right, agree=0.736, adj=0.105, (0 split)
## 
## Node number 5: 885 observations,    complexity param=0.001777643
##   mean=5.819209, MSE=0.6610999 
##   left son=10 (148 obs) right son=11 (737 obs)
##   Primary splits:
##       residualsugar < 1.35     to the left,  improve=0.010292280, (0 missing)
##       density       < 0.995885 to the right, improve=0.008992291, (0 missing)
##       alcohol       < 10.175   to the right, improve=0.008267479, (0 missing)
##   Surrogate splits:
##       density < 0.991385 to the left,  agree=0.847, adj=0.088, (0 split)
## 
## Node number 6: 881 observations,    complexity param=0.005892037
##   mean=6.121453, MSE=0.7605046 
##   left son=12 (5 obs) right son=13 (876 obs)
##   Primary splits:
##       residualsugar < 0.85     to the left,  improve=0.033777760, (0 missing)
##       density       < 0.9978   to the right, improve=0.009508746, (0 missing)
##       alcohol       < 11.31667 to the right, improve=0.003180262, (0 missing)
## 
## Node number 7: 932 observations,    complexity param=0.0037246
##   mean=6.549356, MSE=0.6703107 
##   left son=14 (699 obs) right son=15 (233 obs)
##   Primary splits:
##       alcohol       < 12.775   to the left,  improve=0.022899750, (0 missing)
##       residualsugar < 1.525    to the left,  improve=0.022844040, (0 missing)
##       density       < 0.98996  to the right, improve=0.007021868, (0 missing)
##   Surrogate splits:
##       density < 0.989135 to the right, agree=0.802, adj=0.206, (0 split)
## 
## Node number 8: 1552 observations,    complexity param=0.004895494
##   mean=5.429124, MSE=0.4730693 
##   left son=16 (898 obs) right son=17 (654 obs)
##   Primary splits:
##       alcohol       < 9.575    to the left,  improve=0.025610800, (0 missing)
##       density       < 0.99741  to the right, improve=0.005695639, (0 missing)
##       residualsugar < 1.05     to the left,  improve=0.004256581, (0 missing)
##   Surrogate splits:
##       density       < 0.99501  to the right, agree=0.653, adj=0.176, (0 split)
##       residualsugar < 2.65     to the right, agree=0.617, adj=0.092, (0 split)
## 
## Node number 9: 648 observations,    complexity param=0.007120579
##   mean=5.736111, MSE=0.6572145 
##   left son=18 (315 obs) right son=19 (333 obs)
##   Primary splits:
##       residualsugar < 14.775   to the right, improve=0.06105100, (0 missing)
##       alcohol       < 9.15     to the right, improve=0.04793473, (0 missing)
##       density       < 0.998635 to the right, improve=0.01752086, (0 missing)
##   Surrogate splits:
##       density < 0.99887  to the right, agree=0.738, adj=0.460, (0 split)
##       alcohol < 8.85     to the left,  agree=0.565, adj=0.105, (0 split)
## 
## Node number 10: 148 observations,    complexity param=0.001035207
##   mean=5.635135, MSE=0.7047115 
##   left son=20 (12 obs) right son=21 (136 obs)
##   Primary splits:
##       density       < 0.9935   to the right, improve=0.03812389, (0 missing)
##       residualsugar < 0.75     to the left,  improve=0.03088199, (0 missing)
##       alcohol       < 10.625   to the left,  improve=0.01791730, (0 missing)
## 
## Node number 11: 737 observations,    complexity param=0.001777643
##   mean=5.856174, MSE=0.6441715 
##   left son=22 (116 obs) right son=23 (621 obs)
##   Primary splits:
##       density       < 0.995885 to the right, improve=0.01608006, (0 missing)
##       residualsugar < 14.475   to the right, improve=0.01300643, (0 missing)
##       alcohol       < 10.175   to the right, improve=0.01108344, (0 missing)
##   Surrogate splits:
##       residualsugar < 13.75    to the right, agree=0.896, adj=0.336, (0 split)
## 
## Node number 12: 5 observations
##   mean=4, MSE=0.4 
## 
## Node number 13: 876 observations,    complexity param=0.001951928
##   mean=6.133562, MSE=0.7367275 
##   left son=26 (159 obs) right son=27 (717 obs)
##   Primary splits:
##       residualsugar < 1.275    to the left,  improve=0.011617060, (0 missing)
##       density       < 0.9978   to the right, improve=0.010036870, (0 missing)
##       alcohol       < 11.31667 to the right, improve=0.003928452, (0 missing)
##   Surrogate splits:
##       density < 0.990455 to the left,  agree=0.84, adj=0.119, (0 split)
## 
## Node number 14: 699 observations,    complexity param=0.003136388
##   mean=6.477825, MSE=0.6758316 
##   left son=28 (67 obs) right son=29 (632 obs)
##   Primary splits:
##       residualsugar < 1.225    to the left,  improve=0.025501000, (0 missing)
##       density       < 0.989385 to the left,  improve=0.011072430, (0 missing)
##       alcohol       < 12.55    to the left,  improve=0.004545412, (0 missing)
##   Surrogate splits:
##       density < 0.988635 to the left,  agree=0.907, adj=0.03, (0 split)
## 
## Node number 15: 233 observations,    complexity param=0.001716374
##   mean=6.763948, MSE=0.5923484 
##   left son=30 (81 obs) right son=31 (152 obs)
##   Primary splits:
##       residualsugar < 2.15     to the left,  improve=0.039068820, (0 missing)
##       density       < 0.98987  to the right, improve=0.026550380, (0 missing)
##       alcohol       < 12.89667 to the right, improve=0.004638919, (0 missing)
##   Surrogate splits:
##       density < 0.98893  to the left,  agree=0.768, adj=0.333, (0 split)
##       alcohol < 13.95    to the right, agree=0.657, adj=0.012, (0 split)
## 
## Node number 16: 898 observations,    complexity param=0.002148696
##   mean=5.335189, MSE=0.4166014 
##   left son=32 (20 obs) right son=33 (878 obs)
##   Primary splits:
##       alcohol       < 8.65     to the left,  improve=0.022060800, (0 missing)
##       density       < 0.995445 to the right, improve=0.005018234, (0 missing)
##       residualsugar < 11.55    to the left,  improve=0.004456148, (0 missing)
## 
## Node number 17: 654 observations,    complexity param=0.002099654
##   mean=5.558104, MSE=0.5218533 
##   left son=34 (419 obs) right son=35 (235 obs)
##   Primary splits:
##       residualsugar < 6.75     to the left,  improve=0.02363006, (0 missing)
##       density       < 0.99926  to the right, improve=0.01920325, (0 missing)
##       alcohol       < 9.775    to the left,  improve=0.00509133, (0 missing)
##   Surrogate splits:
##       density < 0.99483  to the left,  agree=0.867, adj=0.63, (0 split)
## 
## Node number 18: 315 observations
##   mean=5.530159, MSE=0.4459158 
## 
## Node number 19: 333 observations,    complexity param=0.007120579
##   mean=5.930931, MSE=0.7790132 
##   left son=38 (150 obs) right son=39 (183 obs)
##   Primary splits:
##       alcohol       < 9.15     to the right, improve=0.11063520, (0 missing)
##       residualsugar < 13.75    to the left,  improve=0.09840903, (0 missing)
##       density       < 1.000215 to the left,  improve=0.04223143, (0 missing)
##   Surrogate splits:
##       density       < 0.997545 to the left,  agree=0.664, adj=0.253, (0 split)
##       residualsugar < 12.75    to the left,  agree=0.601, adj=0.113, (0 split)
## 
## Node number 20: 12 observations
##   mean=5.083333, MSE=0.4097222 
## 
## Node number 21: 136 observations
##   mean=5.683824, MSE=0.701503 
## 
## Node number 22: 116 observations,    complexity param=0.001459041
##   mean=5.62069, MSE=0.6492271 
##   left son=44 (51 obs) right son=45 (65 obs)
##   Primary splits:
##       density       < 0.996775 to the left,  improve=0.07441422, (0 missing)
##       residualsugar < 9.8      to the left,  improve=0.05137508, (0 missing)
##       alcohol       < 10.575   to the right, improve=0.03858501, (0 missing)
##   Surrogate splits:
##       residualsugar < 9.95     to the left,  agree=0.767, adj=0.471, (0 split)
##       alcohol       < 10.45    to the right, agree=0.707, adj=0.333, (0 split)
## 
## Node number 23: 621 observations,    complexity param=0.00126789
##   mean=5.900161, MSE=0.630934 
##   left son=46 (617 obs) right son=47 (4 obs)
##   Primary splits:
##       alcohol       < 10.175   to the right, improve=0.012429370, (0 missing)
##       density       < 0.99349  to the right, improve=0.006599857, (0 missing)
##       residualsugar < 1.65     to the left,  improve=0.004299126, (0 missing)
## 
## Node number 26: 159 observations,    complexity param=0.001505435
##   mean=5.937107, MSE=0.7633401 
##   left son=52 (4 obs) right son=53 (155 obs)
##   Primary splits:
##       density       < 0.99265  to the right, improve=0.047641990, (0 missing)
##       residualsugar < 0.975    to the left,  improve=0.032710300, (0 missing)
##       alcohol       < 11.15    to the right, improve=0.008907326, (0 missing)
## 
## Node number 27: 717 observations,    complexity param=0.001789442
##   mean=6.177127, MSE=0.7203694 
##   left son=54 (3 obs) right son=55 (714 obs)
##   Primary splits:
##       density       < 0.9978   to the right, improve=0.013307190, (0 missing)
##       residualsugar < 15.375   to the right, improve=0.010875320, (0 missing)
##       alcohol       < 11.31667 to the right, improve=0.003067023, (0 missing)
## 
## Node number 28: 67 observations
##   mean=6.074627, MSE=0.4869681 
## 
## Node number 29: 632 observations
##   mean=6.52057, MSE=0.6767921 
## 
## Node number 30: 81 observations,    complexity param=0.001716374
##   mean=6.555556, MSE=0.7901235 
##   left son=60 (13 obs) right son=61 (68 obs)
##   Primary splits:
##       density       < 0.990005 to the right, improve=0.121765400, (0 missing)
##       alcohol       < 13.65    to the left,  improve=0.037812500, (0 missing)
##       residualsugar < 1.75     to the left,  improve=0.009223357, (0 missing)
## 
## Node number 31: 152 observations,    complexity param=0.001006451
##   mean=6.875, MSE=0.4514803 
##   left son=62 (100 obs) right son=63 (52 obs)
##   Primary splits:
##       density       < 0.98953  to the right, improve=0.05633179, (0 missing)
##       residualsugar < 2.25     to the right, improve=0.05186142, (0 missing)
##       alcohol       < 13.55    to the right, improve=0.01291357, (0 missing)
##   Surrogate splits:
##       residualsugar < 3.8      to the right, agree=0.763, adj=0.308, (0 split)
##       alcohol       < 13.65    to the left,  agree=0.664, adj=0.019, (0 split)
## 
## Node number 32: 20 observations
##   mean=4.7, MSE=0.61 
## 
## Node number 33: 878 observations
##   mean=5.349658, MSE=0.402796 
## 
## Node number 34: 419 observations
##   mean=5.47494, MSE=0.5262217 
## 
## Node number 35: 235 observations
##   mean=5.706383, MSE=0.4797465 
## 
## Node number 38: 150 observations
##   mean=5.606667, MSE=0.3452889 
## 
## Node number 39: 183 observations
##   mean=6.196721, MSE=0.9776942 
## 
## Node number 44: 51 observations
##   mean=5.372549, MSE=0.4298347 
## 
## Node number 45: 65 observations
##   mean=5.815385, MSE=0.7351479 
## 
## Node number 46: 617 observations
##   mean=5.893031, MSE=0.6271313 
## 
## Node number 47: 4 observations
##   mean=7, MSE=0 
## 
## Node number 52: 4 observations
##   mean=4.75, MSE=0.1875 
## 
## Node number 53: 155 observations
##   mean=5.967742, MSE=0.7408949 
## 
## Node number 54: 3 observations
##   mean=4.666667, MSE=1.555556 
## 
## Node number 55: 714 observations
##   mean=6.183473, MSE=0.7072339 
## 
## Node number 60: 13 observations
##   mean=5.846154, MSE=0.591716 
## 
## Node number 61: 68 observations
##   mean=6.691176, MSE=0.7134516 
## 
## Node number 62: 100 observations
##   mean=6.76, MSE=0.4224 
## 
## Node number 63: 52 observations
##   mean=7.096154, MSE=0.4330621
rpart.plot(modelopc1, type=2, extra="auto", under=FALSE, clip.right.labs=TRUE,
           fallen.leaves=TRUE,   digits=2, varlen=-3, faclen=15,
           cex=NULL, tweak=1.7,
           compress=TRUE,box.palette="auto",
           snip=FALSE)

Val_pred_tree <- predict(modelopc1,interval = "prediction", level = 0.95) 
str(Val_pred_tree)
##  Named num [1:4898] 5.89 6.52 5.35 5.53 5.97 ...
##  - attr(*, "names")= chr [1:4898] "1" "2" "3" "4" ...
mse_tree <- mean((quality - Val_pred_tree)^2)
sqrt(mse_tree)
## [1] 0.7608975

Podemos observar no ModeloPC1:

Porcentagem de importância das variáveis escolhidas:

alcohol <- 53%
density <- 34%
residualsugar <-13%

Número de Node criados 63
Número de observações 4898

Maiores médias (levando em conta a taxa de cada variável):

mean = 6.555556 | residualsugar < 1.75 | density < 0.990005 | alcohol < 13.65

mean = 6.763948 |
residualsugar < 2.15 |
density < 0.98987 |
alcohol < 12.89667

mean = 6.875 |
alcohol < 13.55 |
residualsugar < 2.25 |
density < 0.98953

Percebemos que os vinhos com valor de residualsugar abaixo de 2.5 tem um potencial de qualidade maior, como também os vinhos com valor de density abaixo de 1 e alcohol abaixo de 14 também contribuem para um vinho de maior qualidade. Com tudo um pode equilibrar o outro na dosagem certa.

Modelo PC3

modelopc3 <- rpart (quality ~ volatileacidity+fixedacidity, data=vinhos_brancos, 
                     cp = 0.001,minsplit = 2,maxdepth=5)

summary(modelopc3)
## Call:
## rpart(formula = quality ~ volatileacidity + fixedacidity, data = vinhos_brancos, 
##     cp = 0.001, minsplit = 2, maxdepth = 5)
##   n= 4898 
## 
##             CP nsplit rel error    xerror       xstd
## 1  0.028760918      0 1.0000000 1.0002808 0.02126917
## 2  0.015752113      1 0.9712391 0.9733464 0.02123496
## 3  0.008279588      2 0.9554870 0.9683729 0.02121537
## 4  0.007699172      3 0.9472074 0.9615141 0.02113519
## 5  0.004649396      4 0.9395082 0.9562813 0.02090303
## 6  0.003227697      5 0.9348588 0.9525901 0.02081560
## 7  0.002992911      6 0.9316311 0.9522683 0.02083822
## 8  0.002848784      7 0.9286382 0.9521320 0.02085243
## 9  0.002609560      8 0.9257894 0.9497721 0.02081957
## 10 0.002552448     10 0.9205703 0.9534204 0.02169170
## 11 0.001699219     11 0.9180179 0.9434923 0.02157804
## 12 0.001541853     13 0.9146194 0.9425308 0.02167353
## 13 0.001476091     14 0.9130776 0.9417203 0.02165819
## 14 0.001250836     15 0.9116015 0.9419791 0.02166205
## 15 0.001242738     17 0.9090998 0.9419274 0.02164350
## 16 0.001101492     18 0.9078571 0.9416794 0.02165470
## 17 0.001074321     19 0.9067556 0.9456143 0.02245344
## 18 0.001000000     21 0.9046069 0.9457414 0.02245685
## 
## Variable importance
## volatileacidity    fixedacidity 
##              59              41 
## 
## Node number 1: 4898 observations,    complexity param=0.02876092
##   mean=5.877909, MSE=0.7841955 
##   left son=2 (3350 obs) right son=3 (1548 obs)
##   Primary splits:
##       volatileacidity < 0.2275 to the right, improve=0.02876092, (0 missing)
##       fixedacidity    < 8.25   to the right, improve=0.01354119, (0 missing)
##   Surrogate splits:
##       fixedacidity < 4.3    to the right, agree=0.684, adj=0.001, (0 split)
## 
## Node number 2: 3350 observations,    complexity param=0.01575211
##   mean=5.775821, MSE=0.818699 
##   left son=4 (128 obs) right son=5 (3222 obs)
##   Primary splits:
##       volatileacidity < 0.535  to the right, improve=0.02206038, (0 missing)
##       fixedacidity    < 6.05   to the right, improve=0.01117759, (0 missing)
## 
## Node number 3: 1548 observations,    complexity param=0.007699172
##   mean=6.098837, MSE=0.638164 
##   left son=6 (102 obs) right son=7 (1446 obs)
##   Primary splits:
##       fixedacidity    < 8.25   to the right, improve=0.02993532, (0 missing)
##       volatileacidity < 0.195  to the right, improve=0.01157136, (0 missing)
## 
## Node number 4: 128 observations,    complexity param=0.002848784
##   mean=5.101562, MSE=0.9506226 
##   left son=8 (66 obs) right son=9 (62 obs)
##   Primary splits:
##       fixedacidity    < 6.65   to the right, improve=0.08992586, (0 missing)
##       volatileacidity < 0.5875 to the right, improve=0.02730248, (0 missing)
##   Surrogate splits:
##       volatileacidity < 0.605  to the right, agree=0.531, adj=0.032, (0 split)
## 
## Node number 5: 3222 observations,    complexity param=0.008279588
##   mean=5.802607, MSE=0.7946797 
##   left son=10 (2720 obs) right son=11 (502 obs)
##   Primary splits:
##       fixedacidity    < 6.05   to the right, improve=0.012420360, (0 missing)
##       volatileacidity < 0.2525 to the right, improve=0.002042838, (0 missing)
## 
## Node number 6: 102 observations,    complexity param=0.001242738
##   mean=5.578431, MSE=0.6360054 
##   left son=12 (18 obs) right son=13 (84 obs)
##   Primary splits:
##       fixedacidity    < 9.1    to the right, improve=0.07358032, (0 missing)
##       volatileacidity < 0.135  to the left,  improve=0.01052138, (0 missing)
## 
## Node number 7: 1446 observations,    complexity param=0.003227697
##   mean=6.135546, MSE=0.6178651 
##   left son=14 (597 obs) right son=15 (849 obs)
##   Primary splits:
##       volatileacidity < 0.195  to the right, improve=0.013876310, (0 missing)
##       fixedacidity    < 6.175  to the left,  improve=0.007268217, (0 missing)
##   Surrogate splits:
##       fixedacidity < 7.95   to the right, agree=0.591, adj=0.01, (0 split)
## 
## Node number 8: 66 observations,    complexity param=0.001074321
##   mean=4.818182, MSE=0.785124 
##   left son=16 (39 obs) right son=17 (27 obs)
##   Primary splits:
##       volatileacidity < 0.5875 to the right, improve=0.05773979, (0 missing)
##       fixedacidity    < 6.85   to the left,  improve=0.05205321, (0 missing)
##   Surrogate splits:
##       fixedacidity < 8.3    to the left,  agree=0.606, adj=0.037, (0 split)
## 
## Node number 9: 62 observations,    complexity param=0.001250836
##   mean=5.403226, MSE=0.9503122 
##   left son=18 (51 obs) right son=19 (11 obs)
##   Primary splits:
##       volatileacidity < 0.5525 to the right, improve=0.05807987, (0 missing)
##       fixedacidity    < 4.55   to the right, improve=0.04398361, (0 missing)
## 
## Node number 10: 2720 observations,    complexity param=0.004649396
##   mean=5.759926, MSE=0.7817029 
##   left son=20 (167 obs) right son=21 (2553 obs)
##   Primary splits:
##       fixedacidity    < 8.25   to the right, improve=0.008399029, (0 missing)
##       volatileacidity < 0.2675 to the right, improve=0.003799829, (0 missing)
## 
## Node number 11: 502 observations,    complexity param=0.002552448
##   mean=6.033865, MSE=0.801642 
##   left son=22 (390 obs) right son=23 (112 obs)
##   Primary splits:
##       fixedacidity    < 5.45   to the right, improve=0.02436217, (0 missing)
##       volatileacidity < 0.525  to the left,  improve=0.01928885, (0 missing)
##   Surrogate splits:
##       volatileacidity < 0.4975 to the left,  agree=0.783, adj=0.027, (0 split)
## 
## Node number 12: 18 observations
##   mean=5.111111, MSE=0.9876543 
## 
## Node number 13: 84 observations
##   mean=5.678571, MSE=0.5038265 
## 
## Node number 14: 597 observations,    complexity param=0.001699219
##   mean=6.025126, MSE=0.6174592 
##   left son=28 (596 obs) right son=29 (1 obs)
##   Primary splits:
##       fixedacidity    < 4.05   to the right, improve=0.010598010, (0 missing)
##       volatileacidity < 0.2175 to the left,  improve=0.004089842, (0 missing)
## 
## Node number 15: 849 observations,    complexity param=0.00260956
##   mean=6.213192, MSE=0.603548 
##   left son=30 (120 obs) right son=31 (729 obs)
##   Primary splits:
##       fixedacidity    < 7.45   to the right, improve=0.014409990, (0 missing)
##       volatileacidity < 0.1325 to the right, improve=0.005042366, (0 missing)
## 
## Node number 16: 39 observations
##   mean=4.641026, MSE=0.6403682 
## 
## Node number 17: 27 observations,    complexity param=0.001074321
##   mean=5.074074, MSE=0.8834019 
##   left son=34 (22 obs) right son=35 (5 obs)
##   Primary splits:
##       volatileacidity < 0.575  to the left,  improve=0.22056750, (0 missing)
##       fixedacidity    < 6.75   to the left,  improve=0.07763975, (0 missing)
## 
## Node number 18: 51 observations
##   mean=5.294118, MSE=0.9134948 
## 
## Node number 19: 11 observations,    complexity param=0.001250836
##   mean=5.909091, MSE=0.8099174 
##   left son=38 (9 obs) right son=39 (2 obs)
##   Primary splits:
##       fixedacidity    < 5.4    to the right, improve=0.69444440, (0 missing)
##       volatileacidity < 0.5475 to the left,  improve=0.09829932, (0 missing)
## 
## Node number 20: 167 observations,    complexity param=0.002992911
##   mean=5.443114, MSE=0.8096382 
##   left son=40 (69 obs) right son=41 (98 obs)
##   Primary splits:
##       volatileacidity < 0.305  to the right, improve=0.08502163, (0 missing)
##       fixedacidity    < 9.25   to the right, improve=0.04334017, (0 missing)
##   Surrogate splits:
##       fixedacidity < 9.75   to the right, agree=0.599, adj=0.029, (0 split)
## 
## Node number 21: 2553 observations,    complexity param=0.001476091
##   mean=5.78065, MSE=0.7728806 
##   left son=42 (1972 obs) right son=43 (581 obs)
##   Primary splits:
##       volatileacidity < 0.2525 to the right, improve=0.002873380, (0 missing)
##       fixedacidity    < 7.35   to the right, improve=0.002062405, (0 missing)
## 
## Node number 22: 390 observations
##   mean=5.958974, MSE=0.7213938 
## 
## Node number 23: 112 observations,    complexity param=0.001541853
##   mean=6.294643, MSE=0.9935427 
##   left son=46 (110 obs) right son=47 (2 obs)
##   Primary splits:
##       volatileacidity < 0.525  to the left,  improve=0.05322081, (0 missing)
##       fixedacidity    < 5.35   to the left,  improve=0.02334421, (0 missing)
## 
## Node number 28: 596 observations,    complexity param=0.001699219
##   mean=6.021812, MSE=0.6119403 
##   left son=56 (1 obs) right son=57 (595 obs)
##   Primary splits:
##       fixedacidity    < 4.5    to the left,  improve=0.025078920, (0 missing)
##       volatileacidity < 0.2175 to the left,  improve=0.003460793, (0 missing)
## 
## Node number 29: 1 observations
##   mean=8, MSE=0 
## 
## Node number 30: 120 observations,    complexity param=0.001101492
##   mean=5.983333, MSE=0.5830556 
##   left son=60 (106 obs) right son=61 (14 obs)
##   Primary splits:
##       fixedacidity    < 8.05   to the left,  improve=0.060469050, (0 missing)
##       volatileacidity < 0.145  to the right, improve=0.009258171, (0 missing)
## 
## Node number 31: 729 observations,    complexity param=0.00260956
##   mean=6.251029, MSE=0.5967925 
##   left son=62 (637 obs) right son=63 (92 obs)
##   Primary splits:
##       fixedacidity    < 7.25   to the left,  improve=0.029105590, (0 missing)
##       volatileacidity < 0.1325 to the right, improve=0.005666815, (0 missing)
## 
## Node number 34: 22 observations
##   mean=4.863636, MSE=0.7541322 
## 
## Node number 35: 5 observations
##   mean=6, MSE=0.4 
## 
## Node number 38: 9 observations
##   mean=5.555556, MSE=0.2469136 
## 
## Node number 39: 2 observations
##   mean=7.5, MSE=0.25 
## 
## Node number 40: 69 observations
##   mean=5.130435, MSE=0.4612476 
## 
## Node number 41: 98 observations
##   mean=5.663265, MSE=0.9376302 
## 
## Node number 42: 1972 observations
##   mean=5.755071, MSE=0.8056284 
## 
## Node number 43: 581 observations
##   mean=5.86747, MSE=0.6519711 
## 
## Node number 46: 110 observations
##   mean=6.263636, MSE=0.9577686 
## 
## Node number 47: 2 observations
##   mean=8, MSE=0 
## 
## Node number 56: 1 observations
##   mean=3, MSE=0 
## 
## Node number 57: 595 observations
##   mean=6.026891, MSE=0.5975962 
## 
## Node number 60: 106 observations
##   mean=5.915094, MSE=0.5305269 
## 
## Node number 61: 14 observations
##   mean=6.5, MSE=0.6785714 
## 
## Node number 62: 637 observations
##   mean=6.200942, MSE=0.575007 
## 
## Node number 63: 92 observations
##   mean=6.597826, MSE=0.6099953
rpart.plot(modelopc3, type=2, extra="auto", under=FALSE, clip.right.labs=TRUE,
           fallen.leaves=TRUE,   digits=2, varlen=-3, faclen=15,
           cex=NULL, tweak=1.7,
           compress=TRUE,box.palette="auto",
           snip=FALSE)

Val_pred_tree2 <- predict(modelopc3,interval = "prediction", level = 0.95) 
str(Val_pred_tree)
##  Named num [1:4898] 5.89 6.52 5.35 5.53 5.97 ...
##  - attr(*, "names")= chr [1:4898] "1" "2" "3" "4" ...
mse_tree <- mean((quality - Val_pred_tree2)^2)
sqrt(mse_tree)
## [1] 0.8422522

Podemos observar no ModeloPC3:

Porcentagem de importância das variáveis escolhidas:

volatileacidity <- 59%
fixedacidity <- 41%

Número de Node criados 63
Número de observações 4898

Maiores médias (levando em conta a taxa de cada variável):

mean = 6.135546 |
volatileacidity < 0.195 |
fixedacidity < 6.175

mean = 6.213192 |
fixedacidity < 7.45 |
volatileacidity < 0.1325

mean = 6.294643 |
volatileacidity < 0.525 |
fixedacidity < 5.35

Percebemos que os vinhos com valor de volatileacidity abaixo de 0.1300 tem um potencial de qualidade maior, como também os vinhos com valor de fixedacidity abaixo de 7.45 também contribuem para um vinho de maior qualidade. Com tudo um pode equilibrar o outro na dosagem certa.

2.3 Resumo Regressão linear / Árvore de Regressão

Com base nas duas técnicas conseguimos enxergar alguns componentes que elevaram o padrão de qualidade do vinho, com alguns diferenciais para cada uma. A técnica de regressão linear parece ser mais segura em mostrar que os componentes citricacid, volatileaciditye e fixedacidity são os causadores de uma maior qualidade do vinho. Já a técnica de árvore de regressão mostra de uma forma mais transparente e fácil de enxergar que a qualidade do vinho é mais elevada por causa dos componentes residualsugar, density e alcohol. Ou seja o modelo pc3 se mostrou mais adequado na regressão linear, e o modelo pc1 se mostrou mais adequado na árvore de regressão.

No contexto geral o modelo PC1 mostrou os melhores resultados, usando a Árvore de Regressão.

3 Parte III

3.1 Regressão Logística

Para aplicarmor uma regressão logistica decidimos categorizar a qualidade dos vinhos em dois tipos, Vinhos Bons com uma qualidade igual ou superior a 7, ou vinhos ruins com uma pontuação de qualidade inferior a 7.

summary(wine_white_dset$quality)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.000   5.000   6.000   5.878   6.000   9.000

A razão de escolhermos 7 como nota divisora de vinhos bons e ruins é porquie a média da qualidade dos vinhos é de aproximandamente 6 e menos de um quarto dos vinhos brancos estão com nota 7 ou acima. Decidimos por categorizar como vinhos bons aqules que tem uma avaliação de qualidade acima da média. Assim podemos rodar uma regressão logistica com as variaveis usadas anteriormente para analisarmos se o modelo gerado é aceitável.

wine_white_dset <- wine_dset %>%
  filter(Vinho == 'WHITE')
Vinhos2Cat <- subset(wine_white_dset, select = -c(id_vinho))
attach(Vinhos2Cat)
Vinhos2Cat$quality_cat[quality >= 7] <- 'Bom'
Vinhos2Cat$quality_cat[quality < 7] <- 'Ruim'

Vinhos2Cat <- subset(Vinhos2Cat, select = -c(quality))

set.seed(2019)
prt <- 2/3

Vinhos2Cat$quality_cat <- as.factor(Vinhos2Cat$quality_cat)

treino <- sample(1:NROW(Vinhos2Cat), as.integer(prt*NROW(Vinhos2Cat)))

trainData <- Vinhos2Cat[treino,]
testData  <- Vinhos2Cat[-treino,]

modelo_log<-glm(quality_cat ~ alcohol+residualsugar+density, trainData, family=binomial(link=logit))
summary(modelo_log)
## 
## Call:
## glm(formula = quality_cat ~ alcohol + residualsugar + density, 
##     family = binomial(link = logit), data = trainData)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.5849   0.3396   0.4503   0.6434   1.7147  
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -229.84344   60.27779  -3.813 0.000137 ***
## alcohol         -0.52618    0.08602  -6.117 9.52e-10 ***
## residualsugar   -0.11847    0.02369  -5.000 5.74e-07 ***
## density        239.11345   59.98898   3.986 6.72e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 3393.8  on 3264  degrees of freedom
## Residual deviance: 2899.4  on 3261  degrees of freedom
## AIC: 2907.4
## 
## Number of Fisher Scoring iterations: 4

O p-value para todas as variáveis está ótimo, podemos usar esse modelo na nossa base de teste para calcularmos a acurácia.

attach(testData)
Predito_teste<-predict(modelo_log, testData)


fx_predito <- cut(Predito_teste, breaks=c(-1,2.5,4), right=F)

MC <- table( quality_cat,  fx_predito , deparse.level = 2) #
show(MC) 
##            fx_predito
## quality_cat [-1,2.5) [2.5,4)
##        Bom       326      28
##        Ruim     1022     249
ACC = sum(diag(MC))/sum(MC) 
show(ACC) 
## [1] 0.3538462

Aqui podemos ver a matriz de confusão, onde há 326 falsos positivos e 249 falsos negativos, com um total de 35% de acurácia. Esse modelo é melhor identificando os vinhos ruins, do que os bons, mas mesmo assim não consegue um resultado muito satisfatório.

3.2 Arvore de Decisão

Vamos tentar com a arvore de decisão, usando as mesmas variáveis:

modelo_tree <- rpart (quality_cat ~ alcohol+residualsugar+density, data=trainData, cp = 0.006,minsplit = 150,maxdepth=10)


rpart.plot(modelo_tree, type=4, extra=104, under=FALSE, clip.right.labs=TRUE,
           fallen.leaves=FALSE,   digits=2, varlen=-3, faclen=20,
           cex=0.4, tweak=1.7,
           compress=TRUE,
           snip=FALSE)

Parece promissor, ela classificou a grande maioria dos vinhos como ruins, vamos ver a acurácia dessa arvore:

pred_class <- predict(modelo_tree ,testData , type = "class")

Campanha.matriz.de.confusao<-table(testData$quality_cat, pred_class)
Campanha.matriz.de.confusao
##       pred_class
##         Bom Ruim
##   Bom   110  250
##   Ruim   63 1210
diagonal <- diag(Campanha.matriz.de.confusao)
perc.erro <- 1 - sum(diagonal)/sum(Campanha.matriz.de.confusao)
perc.erro
## [1] 0.1916718

A arvore de decisão com essas variáveis obtem apenas 19% de acurácia, muito abaixo da regressão logistica. # Parte IV

3.3 Técnicas supervisionadas que poderiam ser usadas

3.3.1 Gaussian Naive Bayes

Uma técnica que pode ser adequada para classificação dos vinhos é Gaussian Naive Bayes essa técnica existe desde os anos 1950. Pertence a uma família de algoritmos chamados classificadores probabilísticos ou probabilidade condicional, onde também assume independência entre os recursos,isso nos permite prever uma classe/categoria, com base em determinado conjunto de recursos, usando probabilidade.O Naive Bayes pode ser aplicado efetivamente para alguns problemas de classificação, apesar de sua simplicidade, o classificador faz a definição de categorias surpreendentemente bem e é freqüentemente usado devido ao fato de superar métodos de classificação mais sofisticados.

3.3.2 Random forest

Quando usadas sozinhas, as árvores de decisão são propensas a overfitting. No entanto, random forest (Várias árvores de decisão) ajudam corrigindo o possível overfitting que poderia ocorrer. A técnica Random forest utiliza uma multiplicidade de árvores de decisão diferentes com previsões diferentes, uma random forest combina os resultados dessas árvores individuais para fornecer os resultados finais.A random forest aplica um algoritmo conjunto chamado ensacamento às árvores de decisão, que ajuda a reduzir a variação e o ajuste excessivo.

3.4 Técnicas não supervisionadas que poderiam ser usadas

3.4.1 Generative Adversarial Networks (GANs)

O Funcionamento de uma GAN se baseia em duas redes neurais uma Geradora e outra com o Discriminadora, o papel da rede geradora é falsificar dados e da rede Discriminadora é identificar quais dados foram falsificados. Ambas estão aprendendo e melhorando. A rede gerador está constantemente aprendendo a criar falsificações melhores, e a rede Discriminadora está constantemente melhorando em detectá-los.

3.4.2 K-means

É uma técnica de análise de cluster que permite agrupar os dados em grupos chamados clusters. Como os rótulos não são fornecidos para cada dado de treinamento, os clusters são determinados pela similaridade dos dados um do outro, essa técnica pode ser uma boa opção para a classificação dos vinhos já que possuímos um grande número de dados